package com.ut.animator;

import com.ut.animator.curve.AbTimelineCurve;
import com.ut.richpath.pathparser.PathDataNode;
import com.ut.richpath.pathparser.PathParserCompat;

import java.util.List;

public class PathEvaluator extends AbTimelineCurve<List<PathDataNode>> {

    @Override
    public float getCurvedTime(float v) {
        List<PathDataNode> evaluatedNodes = evaluate(v, startValue, endValue);
        if (evaluatedNodes != null && evaluator!=null)evaluator.onChange(evaluatedNodes);
        return v;
    }

    @Override
    public List<PathDataNode> evaluate(float fraction, List<PathDataNode> startValue, List<PathDataNode> endValue){
        if (startValue == null || endValue == null)return null;
        List<PathDataNode> evaluatedNodes = this.value !=null ? this.value : PathParserCompat.deepCopyNodes(startValue);
        this.value = evaluatedNodes;

        int startNodeSize = startValue.size();
        for (int i=0; i<startNodeSize; i++) {
            int nodeParamSize = startValue.get(i).getParams().size();
            for (int j=0; j<nodeParamSize; j++) {
                float startFloat = startValue.get(i).getParams().get(j);
                float value = startFloat + fraction * (endValue.get(i).getParams().get(j) - startFloat);
                evaluatedNodes.get(i).getParams().set(j, value);
            }
        }
        return evaluatedNodes;
    }

}
